home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / taropyon / hewin / ccisrc / tdptmp.cci < prev    next >
Text File  |  1993-11-30  |  3KB  |  127 lines

  1. /*************************************************************************
  2. *    テンプレート機能
  3. *************************************************************************/
  4.  
  5.  
  6. char    *_tdpTmp = NULL;    /* テンプレート管理用ワーク    */
  7.  
  8. int        _tdpTmpData_open()
  9. {
  10.     char    tmp[256];
  11.  
  12.     if ( _tdpTmp == NULL )
  13.     {
  14.         if ( (_tdpTmp = AMAC_allocWork(0)) == NULL )
  15.             return (ERR);
  16.         sprintf( tmp,"%s%s", AplGetStartPath(), "tdptmp.tbl" );
  17.         AMAC_load( _tdpTmp, tmp );
  18.     }
  19.     return (NORMAL);
  20. }
  21.  
  22. /*************************************************************************
  23. *    テンプレート機能
  24. *************************************************************************/
  25.  
  26. int        TxdUsr_template( char *txd )
  27. {
  28.     char    word[256], tmp[4];
  29.     int        ch, len;
  30.     size_t    curLnL, curOfs, lnL;
  31.     char    *s;
  32.  
  33.     if ( _tdpTmpData_open() )
  34.         return (ERR);
  35.     if ( TxdGet_selFlag(txd) != 0 )        /* 選択中なら処理しない    */
  36.         return (0);
  37.  
  38.     /* 現在カーソル位置を保存    */
  39.     curLnL = TxdGet_curPosLnL(txd);
  40.     if ( (curOfs = TxdGet_curPosOfs(txd)) == 0 )
  41.         return (NORMAL);
  42.  
  43.     TXD_cmdJump( txd, TXD_PREVWORD );    /* 1ワード戻る    */
  44.     if ( TxdGet_curPosLnL(txd) < curLnL )
  45.         TXD_cmdJump( txd, TXD_CUR_RIGHT );
  46.     if ( (ch = TXD_getch(txd)) < 0 || (isalpha(ch) == 0 && ch != '_') )
  47.     {
  48.         TXD_jumpPos( txd, curLnL, curOfs );
  49.         return (NORMAL);
  50.     }
  51.  
  52.     len = 0;
  53.     while( len < 255 )
  54.     {
  55.         ch = TXD_getch(txd);
  56.         TXD_cmdJump( txd, TXD_CUR_RIGHT );
  57.         if ( isalpha(ch) || ch == '_' )
  58.         {
  59.             word[len++] = ch;
  60.         } else
  61.             break;
  62.     }
  63.     word[len] = '\0';
  64.     TXD_jumpPos( txd, curLnL, curOfs );
  65.     if ( len == 0 )
  66.         return (NORMAL);
  67.  
  68.     if ( (s = AMAC_getName( _tdpTmp, word )) == NULL )
  69.         return (NORMAL);    /* 登録データなし    */
  70.  
  71.     while ( *s )
  72.     {
  73.         ch = (*s) & 0xFF;
  74.         ++s;
  75.         switch ( ch )
  76.         {
  77.             case '\x02':                /* 行頭に    */
  78.                 TXD_cmdJump( txd, TXD_TOPOFLINE );
  79.                 break;
  80.             case '\x06':                /* 行末に    */
  81.                 TXD_cmdJump( txd, TXD_LASTOFLINE );
  82.                 break;
  83.             case '\x08':                /* BS        */
  84.                 TXD_cmdJump( txd, TXD_BS );
  85.                 break;
  86.             case '\n':                    /* 改行    */
  87.                 TXD_cmdJump( txd, TXD_CR );
  88.                 break;
  89.             case '\x0B':                /* ホーム位置    */
  90.                 TXD_jumpPos( txd, curLnL, curOfs );
  91.                 break;
  92.             case '\x1C':                /* カーソル右    */
  93.                 TXD_cmdJump( txd, TXD_CUR_RIGHT );
  94.                 break;
  95.             case '\x1D':                /* カーソル左    */
  96.                 TXD_cmdJump( txd, TXD_CUR_LEFT );
  97.                 break;
  98.             case '\x1E':                /* カーソル上    */
  99.                 TXD_cmdJump( txd, TXD_CUR_UP );
  100.                 break;
  101.             case '\x1F':                /* カーソル下    */
  102.                 TXD_cmdJump( txd, TXD_CUR_DOWN );
  103.                 break;
  104.             case '\x7F':                /* 1文字削除    */
  105.                 TXD_cmdJump( txd, TXD_DEL_CHAR );
  106.                 break;
  107.  
  108.             default:
  109.                 if ( iskanji(ch) && iskanji2(*s) )
  110.                 {    /* 全角    */
  111.                     tmp[0] = ch;
  112.                     tmp[1] = *s;    ++s;
  113.                     tmp[2] = '\0';
  114.                     TXD_setBuf( txd, 0, 2, tmp );
  115.                 } else
  116.                 {
  117.                     tmp[0] = ch;
  118.                     tmp[1] = '\0';
  119.                     TXD_setBuf( txd, 0, 1, tmp );
  120.                 }
  121.                 break;
  122.         }
  123.     }
  124.     return (NORMAL);
  125. }
  126.  
  127.